/**
* Funciones auxiliares para el manejo de la estructura asociada a la
* metainformacion de un usuario
*
* @author Carlos Rodriguez Dominguez
*/

#ifndef _MIUSER_H_
#define _MIUSER_H_

#include "collaboration.h"

namespace MIUser {
	
	/**
	* Obtiene la posicion de un componente
	*
	* @param r Usuario
	* @param name Nombre del componente
	* @return Posicion del componente o -1 si no se encontro
	*/
	int get_component(collaboration::MIUser* r, const char* name);
	
	/**
	* Asigna un valor para el miembro "is_online"
	*
	* @param r Usuario
	* @param b Valor para el miembro "is_online"
	*/
	void is_online(collaboration::MIUser* r, CORBA::Boolean b);
	
	/**
	* Comprueba si el usuario tiene un rol como disponible
	*
	* @param r Usuario
	* @param role Nombre del rol
	* @return True si el rol esta disponible o False si no lo esta
	*/
	CORBA::Boolean has_allowed_role(collaboration::MIUser* r, const char* role);
	
	/**
	* Agrega un rol disponible a un usuario
	*
	* @param r Usuario
	* @param role Nombre del rol
	* @return True si el rol se agrego o False en caso contrario
	*/
	CORBA::Boolean add_allowed_role(collaboration::MIUser* r, const char* role);
	
	/**
	* Elimina un rol disponible a un usuario
	*
	* @param r Usuario
	* @param role Nombre del rol
	* @return True si el rol se elimino o False en caso contrario
	*/
	CORBA::Boolean remove_allowed_role(collaboration::MIUser* r, const char* role);
	
	/**
	* Obtiene el nivel de permisos de un usuario sobre un componente
	*
	* @param r Usuario
	* @param comp_name Nombre del componente
	* @return Nivel de permisos del usuario sobre el componente
	*/
	CORBA::Long get_component_permissions(collaboration::MIUser* r, const char* comp_name);
	
	/**
	* Asigna un nivel de permisos para un componente. Si el componente no existe lo CREA
	*
	* @param r Usuario
	* @param comp_name Nombre del componente
	* @param level Nivel de permisos
	*/
	void set_component_permissions(collaboration::MIUser* r, const char* comp_name, CORBA::Long level);
	
}

#endif
